package com.sz.app.oss.api;

import com.sz.common.base.logger.Logger;


import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.Random;

/**
 * Created by xutao on 16/11/4.
 */
public class VCodeGenerator {

//	public static final int WIDTH = 100;// 生成的图片的宽度
//	public static final int HEIGHT = 45;// 生成的图片的高度

    public static final int RANDOM_SEED = 80;// 产生随机数的种子

    private static final Logger logger = Logger.getLogger(VCodeGenerator.class);
    /**
     * 将两张图片进行合成
     *
     * @param istreamBg   大背景图片
     * @param istreamLogo 阴影小图标
     * @param x,y         小图片嵌入大背景的左上角坐标
     */
    public static BufferedImage mergePic(InputStream istreamBg, InputStream istreamLogo, int x, int y) {
        try {
            Image bgSrc = javax.imageio.ImageIO.read(istreamBg);
            Image logoSrc = javax.imageio.ImageIO.read(istreamLogo);
            int bgWidth = bgSrc.getWidth(null);
            int bgHeight = bgSrc.getHeight(null);
            int logoWidth = logoSrc.getWidth(null);
            int logoHeight = logoSrc.getHeight(null);
            BufferedImage tag = new BufferedImage(bgWidth, bgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = tag.createGraphics();
            g2d.drawImage(bgSrc, 0, 0, bgWidth, bgHeight, null);
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f)); // 透明度设置开始
            g2d.drawImage(logoSrc, x * bgWidth / 100, y, logoWidth, logoHeight, null);
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // 透明度设置
            return tag;
        } catch (Exception e) {
            logger.error("",e);
            throw new RuntimeException(e);
        }
    }

    /**
     * 产生随机数，范围在0到100之间，即背影logo的x坐标百分比
     */
    public static int genRandomNum() {
        Random random = new Random();
        int res = random.nextInt(RANDOM_SEED) + 5;
        return res;
    }

//	/**
//	 * 设置图片的背景色
//	 *
//	 * @param g
//	 */
//	public static void setBackGround(Graphics g) {
//		// 设置颜色
//		g.setColor(Color.WHITE);
//		// 填充区域
//		g.fillRect(0, 0, WIDTH, HEIGHT);
//	}
//
//	/**
//	 * 设置图片的边框
//	 *
//	 * @param g
//	 */
//	public static void setBorder(Graphics g) {
//		// 设置边框颜色
//		// g.setColor(Color.BLUE);
//		// 边框区域
//		g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
//	}
//
//	/**
//	 * 在图片上画随机线条
//	 *
//	 * @param g
//	 */
//	public static void drawRandomLine(Graphics g) {
//		// 设置颜色
//		g.setColor(Color.GREEN);
//		// 设置线条个数并画线
//		for (int i = 0; i < 5; i++) {
//			int x1 = new Random().nextInt(WIDTH);
//			int y1 = new Random().nextInt(HEIGHT);
//			int x2 = new Random().nextInt(WIDTH);
//			int y2 = new Random().nextInt(HEIGHT);
//			g.drawLine(x1, y1, x2, y2);
//		}
//	}
//
//	/**
//	 * 画随机字符
//	 *
//	 * @param g
//	 * @param createTypeFlag
//	 * @return String... createTypeFlag是可变参数，
//	 *         Java1.5增加了新特性：可变参数：适用于参数个数不确定，类型确定的情况，java把可变参数当做数组处理。注意：
//	 *         可变参数必须位于最后一项
//	 */
//	public static String drawRandomNum(Graphics2D g, String... createTypeFlag) {
//		// 设置颜色
//		g.setColor(Color.RED);
//		// 设置字体
//		g.setFont(new Font("宋体", Font.BOLD, 25));
//		// 数字和字母的组合
//		String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
//
//		return createRandomChar(g, baseNumLetter);
//
//	}
//
//	/**
//	 * 创建随机字符
//	 *
//	 * @param g
//	 * @param baseChar
//	 * @return 随机字符
//	 */
//	public static String createRandomChar(Graphics2D g, String baseChar) {
//		StringBuffer sb = new StringBuffer();
//		int x = 5;
//		String ch = "";
//		// 控制字数
//		for (int i = 0; i < 4; i++) {
//			// 设置字体旋转角度
//			Random random = new Random();
//			int degree = random.nextInt() % 30;
//			ch = baseChar.charAt(random.nextInt(baseChar.length())) + "";
//			sb.append(ch);
//			// 正向角度
//			g.rotate(degree * Math.PI / 180, x, 20);
//			g.drawString(ch, x, 30);
//
//			// 反向角度
//			g.rotate(-degree * Math.PI / 180, x, 20);
//			x += 25;
//		}
//		return sb.toString();
//	}

}
